using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.MakeIT.Laundy.Agromotor.Site.Entidades;

namespace MakeIT.MakeIT.Laundy.Agromotor.Site.Negocios
{
	public partial class AgromotorsiteDAO : DAO
	{

		public static MarcamodeloVO getMarcamodelo(int? idMarcaModelo, string marcaModelo)
		{
			MarcamodeloVO marcamodeloVO = null;
			List<MarcamodeloVO> listMarcamodeloVOs = getMarcamodelos(idMarcaModelo, marcaModelo);
			if (listMarcamodeloVOs != null && listMarcamodeloVOs.Count > 0)
			{
				marcamodeloVO = listMarcamodeloVOs[0];
			}
			return marcamodeloVO;
		}

		public static MarcamodeloVO getMarcamodelo(int? idMarcaModelo)
		{
			return getMarcamodelo(idMarcaModelo, null);
		}

		public static List<MarcamodeloVO> getMarcamodelos()
		{
			return getMarcamodelos(null, null);
		}

		public static List<MarcamodeloVO> getMarcamodelos(int? idMarcaModelo)
		{
			return getMarcamodelos(idMarcaModelo, null);
		}

		public static List<MarcamodeloVO> getMarcamodelos(int? idMarcaModelo, string marcaModelo)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT mam.idMarcaModelo as mam_idMarcaModelo, mam.marcaModelo as mam_marcaModelo, mam.imagemMime as mam_imagemMime, mam.imagemNome as mam_imagemNome , mam.ordem as mam_ordem, mam.Cadastro as mam_Cadastro, mam.CadastradoPor as mam_CadastradoPor, mam.Edicao as mam_Edicao, mam.EditadoPor as mam_EditadoPor  ");
			query.AppendLine("FROM marcamodelo as mam ");
			if (idMarcaModelo != null)
			{
				query.AppendLine(where + "mam.idMarcaModelo=@idMarcaModelo ");
				where = "AND ";
			}
			if (marcaModelo != null)
			{
				query.AppendLine(where + "mam.marcaModelo LIKE @marcaModelo ");
				where = "AND ";
			}


            query.AppendLine("ORDER BY mam.ordem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			if (idMarcaModelo!= null) cmd.Parameters.Add(getParameter(cmd, "@idMarcaModelo", idMarcaModelo));
			if (marcaModelo!= null) cmd.Parameters.Add(getParameter(cmd, "@marcaModelo", "%"+marcaModelo+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<MarcamodeloVO> listMarcamodelo = new List<MarcamodeloVO>();

				while (reader.Read())
				{
					MarcamodeloVO marcamodeloVO = MarcamodeloVO.CreateVO();
					marcamodeloVO.idMarcaModelo = reader.GetInt32(reader.GetOrdinal("mam_idMarcaModelo"));
					marcamodeloVO.marcaModelo = reader.GetString(reader.GetOrdinal("mam_marcaModelo"));
					if (!reader.IsDBNull(reader.GetOrdinal("mam_imagemMime")))
						marcamodeloVO.imagemMime = reader.GetString(reader.GetOrdinal("mam_imagemMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("mam_imagemNome")))
						marcamodeloVO.imagemNome = reader.GetString(reader.GetOrdinal("mam_imagemNome"));
					marcamodeloVO.ordem = reader.GetInt32(reader.GetOrdinal("mam_ordem"));
					marcamodeloVO.cadastro = reader.GetDateTime(reader.GetOrdinal("mam_Cadastro"));
					marcamodeloVO.cadastradoPor = reader.GetString(reader.GetOrdinal("mam_CadastradoPor"));
					marcamodeloVO.edicao = reader.GetDateTime(reader.GetOrdinal("mam_Edicao"));
					marcamodeloVO.editadoPor = reader.GetString(reader.GetOrdinal("mam_EditadoPor"));


					listMarcamodelo.Add(marcamodeloVO);
				}
				reader.Close();
				return listMarcamodelo;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }
        }

		public static void setMarcamodelo(MarcamodeloVO marcamodeloVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE marcamodelo ");
			query.AppendLine("SET marcaModelo=@marcaModelo, imagemMime=@imagemMime, imagemNome=@imagemNome, ordem=@ordem,  Cadastro=@Cadastro, CadastradoPor=@CadastradoPor, Edicao=@Edicao, EditadoPor=@EditadoPor ");
			query.AppendLine("WHERE idMarcaModelo=@idMarcaModelo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idMarcaModelo", marcamodeloVO.idMarcaModelo));
			cmd.Parameters.Add(getParameter(cmd, "@marcaModelo", marcamodeloVO.marcaModelo));
			cmd.Parameters.Add(getParameter(cmd, "@imagemMime", marcamodeloVO.imagemMime));
			cmd.Parameters.Add(getParameter(cmd, "@imagemNome", marcamodeloVO.imagemNome));
			cmd.Parameters.Add(getParameter(cmd, "@ordem", marcamodeloVO.ordem));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", marcamodeloVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", marcamodeloVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", marcamodeloVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", marcamodeloVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static long newMarcamodelo(MarcamodeloVO marcamodeloVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO marcamodelo ");
			query.AppendLine("  ( marcaModelo, imagemMime, imagemNome, ordem, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
			query.AppendLine("VALUES ( @marcaModelo, @imagemMime, @imagemNome, @ordem, @Cadastro, @CadastradoPor, @Edicao, @EditadoPor ) ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@marcaModelo", marcamodeloVO.marcaModelo));
			cmd.Parameters.Add(getParameter(cmd, "@imagemMime", marcamodeloVO.imagemMime));
			cmd.Parameters.Add(getParameter(cmd, "@imagemNome", marcamodeloVO.imagemNome));
			cmd.Parameters.Add(getParameter(cmd, "@ordem", marcamodeloVO.ordem));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", marcamodeloVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", marcamodeloVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", marcamodeloVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", marcamodeloVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('marcamodelo') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static void delMarcamodelo(MarcamodeloVO marcamodeloVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM marcamodelo ");
			query.AppendLine("WHERE idMarcaModelo=@idMarcaModelo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idMarcaModelo", marcamodeloVO.idMarcaModelo));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}
		public static void setMarcamodeloImagem(MarcamodeloVO marcamodeloVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE marcamodelo ");
			query.AppendLine("SET imagem=@imagem, imagemMime=@imagemMime, imagemNome=@imagemNome ");
			query.AppendLine("WHERE idMarcaModelo=@idMarcaModelo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idMarcaModelo", marcamodeloVO.idMarcaModelo));

			cmd.Parameters.Add(getParameter(cmd, "@imagem", marcamodeloVO.imagem));
			cmd.Parameters.Add(getParameter(cmd, "@imagemMime", marcamodeloVO.imagemMime));
			cmd.Parameters.Add(getParameter(cmd, "@imagemNome", marcamodeloVO.imagemNome));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static void getMarcamodeloImagem(MarcamodeloVO marcamodeloVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT imagem as mam_imagem, imagemMime as mam_imagemMime, imagemNome as mam_imagemNome ");
			query.AppendLine("FROM marcamodelo ");
			query.AppendLine("WHERE idMarcaModelo=@idMarcaModelo ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idMarcaModelo", marcamodeloVO.idMarcaModelo));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				if (reader.Read())
				{
					marcamodeloVO.imagem = getBytesFromBlob(reader, "mam_imagem");

					if (!reader.IsDBNull(reader.GetOrdinal("mam_imagemMime")))
						marcamodeloVO.imagemMime = reader.GetString(reader.GetOrdinal("mam_imagemMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("mam_imagemNome")))
						marcamodeloVO.imagemNome = reader.GetString(reader.GetOrdinal("mam_imagemNome"));

				}
				reader.Close();
				return;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }
        }

	}
}
